home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / Projects / Examples / More Examples / Tempos, controllers, programs < prev    next >
Lisp/Scheme  |  1998-10-26  |  6KB  |  232 lines

  1. Tempo-zones
  2.  
  3. Tempo-zone controls how often you generate tempo events. If the
  4. zones are defined in default then the tempo zones follow zones,
  5. and a new tempo event is sent at the start of a new zone. However,
  6. to make smoother tempo curves you have to send tempo events in
  7. every 1/8 or even 1/16 note. You can do this by defining the tempo
  8. zones. If you have a section length 16/1 and you want to sent
  9. tempos every 1/8 note you can calculate the number of events
  10. with (get-tick '1/16) divided by (get-tick '1/8) and then you
  11. can use this value to gen-repeat or symbol-trim a proper list
  12. of 1/8 values, and then generate tempo curve by fourier synthesis
  13. for the same amount of events and vector-scale it to the tempo
  14. range. This can give very natural tempos. 
  15.  
  16. Example: Sections, tempo-zones, programs and controllers
  17.  
  18. (setq toner1 '(a b c d e f g h i j k l m n o p))
  19. (setq toner2 '(ah bi cj dk el fm gn ho ip jq kr ls))
  20.  
  21. (setq melodi1 (nthcdr 12 (gen-variants 0.343 32 toner1)))
  22. (setq melodi2 (nthcdr 12 (gen-variants 0.343 32 toner2)))
  23.  
  24. (setq tonalitet1 (activate-tonality (lydian c 4)))
  25. (setq tonalitet2 (activate-tonality (chromatic c 3)))
  26.  
  27. (setq rytme1 '(-1/8 1/8t 1/8t 1/8t 1/16 1/16 1/8 1/16 1/16 1/8 1/8 1/8))
  28. (setq rytme2 '(1/4 1/16 1/16 1/8 1/8 1/8 1/8 1/8))
  29. (setq rytme3 '(1/1))
  30.  
  31. (setq lengde1 '(1/32 1/32 1/32 1/32 1/32 1/8 1/32 1/32 1/8 1/32 1/32))
  32. (setq lengde2 '(1/4 1/32 1/32 1/16 1/64 1/64 1/64 1/64))
  33.  
  34. (setq dynamikk1 (gen-cresc 64 100 11))
  35. (setq dynamikk2 '(100 80 80 105 50 50 50 64))
  36.  
  37. (setq sone1 (bars-to-zones '(-4) '(4/4)))
  38. (setq sone2 (bars-to-zones '(4) '(4/4)))
  39. (setq sone3 (bars-to-zones '(8) '(4/4)))
  40.  
  41. (def-grammar 'melodi-struktur
  42.   sonate (intro melodi slutt)
  43.   intro (sect-a)
  44.   melodi (sect-b sect-c sect-d)
  45.   slutt (sect-e)
  46. )
  47.  
  48. (def-orchestra 'pianist
  49.   piano (right-hand left-hand)
  50. )
  51.  
  52. (def-section sect-a
  53.    default
  54.       program (mu80-sounds grandpno)
  55.       tempo-zones sone2
  56.       tempo '(100)
  57.    right-hand
  58.       channel 1
  59.       zone sone1
  60.       tonality tonalitet1
  61.       length rytme3
  62.       duration lengde1
  63.       symbol melodi1
  64.       velocity dynamikk1
  65.       controller
  66.          (mu80-controllers
  67.             volume (list '(115))
  68.             panning (list '(64))
  69.             reverb-level (list '(0))
  70.             chorus-level (list '(100)))
  71.    left-hand
  72.       channel 2
  73.       zone sone2
  74.       tonality tonalitet2
  75.       length rytme2
  76.       duration lengde2
  77.       symbol melodi2
  78.       velocity dynamikk2
  79.       controller
  80.          (mu80-controllers
  81.             volume (list '(115))
  82.             panning (list '(64))
  83.             reverb-level (list '(0))
  84.             chorus-level (list '(100)))
  85. )
  86.  
  87. (def-section sect-b
  88.    default
  89.       program (mu80-sounds clavi)
  90.       tempo-zones sone3
  91.       tempo '(90)
  92.    right-hand
  93.       channel 1
  94.       zone sone3
  95.       tonality tonalitet1
  96.       length rytme1
  97.       duration lengde1
  98.       symbol melodi1
  99.       velocity dynamikk1
  100.       controller
  101.          (mu80-controllers
  102.             volume (list '(100))
  103.             panning (list '(64))
  104.             reverb-level (list '(20))
  105.             chorus-level (list '(80)))
  106.    left-hand
  107.       channel 2
  108.       zone sone3
  109.       tonality tonalitet2
  110.       length rytme2
  111.       duration lengde2
  112.       symbol melodi2
  113.       velocity dynamikk2
  114.       controller
  115.          (mu80-controllers
  116.             volume (list '(100))
  117.             panning (list '(64))
  118.             reverb-level (list '(20))
  119.             chorus-level (list '(80)))
  120. )
  121.  
  122. (def-section sect-c
  123.    default
  124.       program (mu80-sounds elgrpnok)
  125.       tempo-zones sone3
  126.       tempo '(80)
  127.    right-hand
  128.       channel 1
  129.       zone sone3
  130.       tonality tonalitet1
  131.       length rytme1
  132.       duration lengde1
  133.       symbol melodi1
  134.       velocity dynamikk1
  135.       controller
  136.          (mu80-controllers
  137.             volume (list '(80))
  138.             panning (list '(64))
  139.             reverb-level (list '(40))
  140.             chorus-level (list '(60)))
  141.    left-hand
  142.       channel 2
  143.       zone sone3
  144.       tonality tonalitet2
  145.       length rytme2
  146.       duration lengde2
  147.       symbol melodi2
  148.       velocity dynamikk2
  149.       controller
  150.          (mu80-controllers
  151.             volume (list '(80))
  152.             panning (list '(64))
  153.             reverb-level (list '(40))
  154.             chorus-level (list '(60)))
  155. )
  156.  
  157. (def-section sect-d
  158.    default
  159.       program (mu80-sounds harpsi)
  160.       tempo-zones sone3
  161.       tempo '(70)
  162.    right-hand
  163.       channel 1
  164.       zone sone3
  165.       tonality tonalitet1
  166.       length rytme1
  167.       duration lengde1
  168.       symbol melodi1
  169.       velocity dynamikk1
  170.       controller
  171.          (mu80-controllers
  172.             volume (list '(60))
  173.             panning (list '(64))
  174.             reverb-level (list '(70))
  175.             chorus-level (list '(30)))
  176.    left-hand
  177.       channel 2
  178.       zone sone3
  179.       tonality tonalitet2
  180.       length rytme2
  181.       duration lengde2
  182.       symbol melodi2
  183.       velocity dynamikk2
  184.       controller
  185.          (mu80-controllers
  186.             volume (list '(60))
  187.             panning (list '(64))
  188.             reverb-level (list '(70))
  189.             chorus-level (list '(30)))
  190. )
  191.  
  192. (def-section sect-e
  193.    default
  194.       program (mu80-sounds hnkytonk)
  195.       tempo-zones sone2
  196.       tempo '(60)
  197.    right-hand
  198.       channel 1
  199.       zone sone1
  200.       tonality tonalitet1
  201.       length rytme3
  202.       duration lengde1
  203.       symbol melodi1
  204.       velocity dynamikk1
  205.       controller
  206.          (mu80-controllers
  207.             volume (list '(40))
  208.             panning (list '(64))
  209.             reverb-level (list '(90))
  210.             chorus-level (list '(10)))
  211.    left-hand
  212.       channel 2
  213.       zone sone2
  214.       tonality tonalitet2
  215.       length rytme2
  216.       duration lengde2
  217.       symbol melodi2
  218.       velocity dynamikk2
  219.       controller
  220.          (mu80-controllers
  221.             volume (list '(40))
  222.             panning (list '(64))
  223.             reverb-level (list '(90))
  224.             chorus-level (list '(10)))
  225.  
  226. (midiport :printer)
  227.  
  228. (play-file-p "Sonata for Piano 1.5.MID"
  229.    piano '(sonate)
  230. )
  231.